home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / misc / amag / sh9301e.lha / Maxon-CPP-Demo / Source / Complex.C next >
C/C++ Source or Header  |  1993-02-17  |  3KB  |  139 lines

  1.  
  2. // Einfache Implementierung komplexer Zahlen in C++
  3. //
  4. // Geschrieben von Jens Gelhar 20.11.92
  5.  
  6.  
  7. #include <iostream.h>     // Includedatei für Ein- und Ausgabe
  8.  
  9.  
  10. // ***** Die Klassendefinition und Funktionsprototypen *****
  11.  
  12. class Complex
  13. { public:                    // d. h. keine privaten Bezeichner
  14.  
  15.     double r, i;             // Real- und Imaginärteil
  16.  
  17.     Complex(double re=0, double im=0);   // Konstruktor
  18.  
  19.     Complex conj() const;    // berechnet konjugiert-komplexe
  20. };
  21.  
  22. // Die vier Grundrechenarten:
  23. Complex operator + (const Complex &c1, const Complex &c2);
  24. Complex operator - (const Complex &c1, const Complex &c2);
  25. Complex operator * (const Complex &c1, const Complex &c2);
  26. Complex operator / (const Complex &c1, const Complex &c2);
  27.  
  28. // Vergleichs-Operationen:
  29. int operator == (const Complex &c1, const Complex &c2);
  30. int operator != (const Complex &c1, const Complex &c2);
  31.  
  32. // Ausgabe-Funktion:
  33. ostream &operator << (ostream &os, const Complex &c);
  34.  
  35.  
  36. // ***** Implementation *****
  37.  
  38. Complex::Complex(double re, double im)
  39. {
  40.   r = re;
  41.   i = im;
  42. }
  43.  
  44. Complex Complex::conj() const
  45. {
  46.   Complex ergebnis(r, -i);
  47.   return ergebnis;
  48. }
  49.  
  50.  
  51. Complex operator + (const Complex &c1, const Complex &c2)
  52. {
  53.   Complex ergebnis(c1.r+c2.r, c1.i+c2.i);
  54.   return ergebnis;
  55. }
  56.  
  57.  
  58. Complex operator - (const Complex &c1, const Complex &c2)
  59. {
  60.   Complex ergebnis(c1.r-c2.r, c1.i-c2.i);
  61.   return ergebnis;
  62. }
  63.  
  64.  
  65. Complex operator * (const Complex &c1, const Complex &c2)
  66. {
  67.   Complex ergebnis;
  68.   ergebnis.r = c1.r*c2.r - c1.i*c2.i;
  69.   ergebnis.i = c1.r*c2.i + c1.i*c2.r;
  70.   return ergebnis;
  71. }
  72.  
  73.  
  74. Complex operator / (const Complex &c1, const Complex &c2)
  75. {
  76.   Complex nenner = c1 * c2.conj();
  77.   double zaehler = c2.r*c2.r + c2.i*c2.i;
  78.  
  79.   return Complex(nenner.r/zaehler, nenner.i/zaehler);
  80. }
  81.  
  82.  
  83. int operator == (const Complex &c1, const Complex &c2)
  84. {
  85.   return (c1.r == c2.r && c1.i == c2.i);
  86. }
  87.  
  88.  
  89. int operator != (const Complex &c1, const Complex &c2)
  90. {
  91.   return (c1.r != c2.r || c1.i != c2.i);
  92. }
  93.  
  94.  
  95. ostream &operator << (ostream &os, const Complex &c)
  96. {
  97.   if(c.r != 0)
  98.    { if (c.i > 0)
  99.        os << "(" << c.r << " +" << c.i << "i)";
  100.      else if (c.i < 0)
  101.        os << "(" << c.r << " -" << -c.i << "i)";
  102.      else
  103.        os << c.r;
  104.    }
  105.   else
  106.    if (c.i != 0)
  107.      os << c.i << "i";
  108.    else
  109.      os << "0";
  110.  
  111.   return os;
  112. }
  113.  
  114.  
  115. // ***** Ein simples Beispielprogramm: *****
  116.  
  117. void main()
  118. {
  119.   Complex x, y;
  120.  
  121.   cout << "Bitte geben Sie zwei komplexe Zahlen ein:" << endl;
  122.   cout << "x (Realteil):     ";
  123.     cin >> x.r;
  124.   cout << "x (Imaginärteil): ";
  125.     cin >> x.i;
  126.  
  127.   cout << "y (Realteil):     ";
  128.     cin >> y.r;
  129.   cout << "y (Imaginärteil): ";
  130.     cin >> y.i;
  131.  
  132.   cout << endl;
  133.   cout << "x + y = " << x+y << endl;
  134.   cout << "x - y = " << x-y << endl;
  135.   cout << "x * y = " << x*y << endl;
  136.   cout << "x / y = " << x/y << endl;
  137. }
  138.  
  139.